import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
num_list = [1, 8, 2, 6, 9, 4, 12, 0, 56, 45]    # 定义列表

# 使用for循环实现(教材方法-不是正宗的冒泡，是选择排序)
count = 0
for i in range(len(num_list)):
    for j in range(i):
        count += 1
        logger.debug(f"i={i}, j={j}")
        if num_list[j] > num_list[i]:
            logger.debug("交换")
            num_list[i], num_list[j] = num_list[j], num_list[i]
print(num_list)
print(f"循环次数：{count}")

# 使用while循环实现(教材方法改变-不是正宗的冒泡，是选择排序)
num_list = [1, 8, 2, 6, 9, 4, 12, 0, 56, 45]    # 定义列表
count = 0
loop_times = len(num_list)
while loop_times > 1:
    for i in range(loop_times - 1):
        count += 1
        # 比较两个元素，当前面的元素大时交换
        if num_list[i] > num_list[i+1]:
            num_list[i], num_list[i+1] = num_list[i+1], num_list[i]
    loop_times -= 1
print(num_list)
print(f"循环次数：{count}")


# 冒泡排序(优化后的 效率为N-1累加到1)
num_list = [1, 8, 2, 6, 9, 4, 12, 0, 56, 45]    # 定义列表
count = 0
for i in range(len(num_list)):
    for j in range(len(num_list)-i-1):
        count += 1
        if num_list[j] > num_list[j+1]:
            logger.debug("交换")
            num_list[j], num_list[j+1] = num_list[j+1], num_list[j]
print(num_list)
print(f"循环次数：{count}")

# 冒泡排序（未优化 效率为N*(N-1)）大致估计时间复杂度为N的平方
num_list = [1, 8, 2, 6, 9, 4, 12, 0, 56, 45]
count = 0
for i in range(len(num_list)):
    for j in range(len(num_list)-1):
        count += 1
        if num_list[j] > num_list[j+1]:
            num_list[j], num_list[j+1] = num_list[j+1], num_list[j]

print(num_list)
print(f"循环次数：{count}")